module checksum(
	ver					,	//版本
	hdr_len				,	//首部长度
	tos					,	//服务类型
	total_len			,	//IP报文总长
	id						,	//分段标识
	offset				,	//偏移
	ttl					,	//生存周期
	protocol				,	//上层协议类型
	src_ip				,	//源IP地址
	dst_ip				,	//源IP地址
	checksum_result	
);
//纯组合逻辑
	input [3:0]ver;
	input [3:0]hdr_len;
	input [7:0] tos;
	input [15:0]total_len;
	input [15:0]id;
	input [15:0]offset;
	input [7:0]ttl;
	input [7:0]protocol;
	input [31:0]src_ip;
	input [31:0]dst_ip;
	output [15:0]checksum_result;
	
	wire [31:0] suma,sumb;
	//以2B为单位进行拼接组装，然后每个部分进行相加，如果溢出（高十六位不为零），则将溢出部分添加到低位 再取反即为校验和
	assign suma = {ver,hdr_len,tos} + total_len + id + offset + {ttl,protocol}+
						src_ip[31:16] + src_ip[15:0] + dst_ip[31:16] + dst_ip[15:0];
						
	assign sumb = suma[31:16] + suma[15:0];
	
	assign checksum_result = sumb[31:16] ?~(sumb[31:16] + sumb[15:0]) : ~(sumb[15:0]);

endmodule 